package jwt

import (
	"time"

	"gitee.com/xinshortlink/internal/dto/resp/bizerr"
	v5 "github.com/golang-jwt/jwt/v5"
)

func GenerateToken(id, signKey string) (string, error) {
	claims := v5.MapClaims{
		"id":   id,
		"unix": time.Now().Unix(), // 使用时间戳保证同一个账户，每次生成的 token 不一致。uuid 有点长，会增加token长度。
	}
	token := v5.NewWithClaims(v5.SigningMethodHS256, claims)
	return token.SignedString([]byte(signKey))
}

func ParseToken(tokenStr, signKey string) (string, error) {
	token, err := v5.Parse(tokenStr, func(t *v5.Token) (interface{}, error) {
		return []byte(signKey), nil
	})

	if err != nil {
		return "", err
	}

	if claims, ok := token.Claims.(v5.MapClaims); ok {
		if id, ok := claims["id"].(string); ok {
			return id, nil
		}
	}
	return "", bizerr.ErrTokenInvalid
}
